﻿using System.Collections.Generic;
using ControleRepresentante.Logic.Models;

namespace ControleRepresentante.Logic.ImpostoHandlers
{
    public interface IImpostoProvider
    {
        double Evaluate(Representante representante, Pedido pedido);
    }

    public class ImpostoProvider : IImpostoProvider
    {
        private readonly List<IImpostoHandler> m_Handlers;

        public ImpostoProvider()
        {
            m_Handlers = new List<IImpostoHandler>
                             {
                                 new JolitexImpostoHandler(),
                             };
        }

        public double Evaluate(Representante representante, Pedido pedido)
        {
            double result = 0;
            foreach (Produto produto in pedido.Produtos)
            {
                foreach (IImpostoHandler impostoHandler in m_Handlers)
                {
                    if (impostoHandler.CanHandle(representante, pedido, produto))
                    {
                        result = result + impostoHandler.Evaluate(produto);
                    }
                }
            }
            return result;
        }
    }
}